package farmaweb

class VendaController {

    def index = {
        redirect(action: "efetuarVenda")
    }

    def efetuarVendaFlow = {

        inicializar {
            action {
                // Inicializa valores que serão utilizados pela tela de vendas:
                Venda instanciaVenda = new Venda()
                instanciaVenda.data = new Date()
                // Cria coleção vazia de ítens de venda:
                instanciaVenda.itensVenda = new ArrayList<ItemVenda>()
                def clientes = Cliente.list(sort:'razaoSocial', order: 'asc')
                session["instanciaVenda"] = instanciaVenda
                [clientes: clientes]
            }
             on("success").to("selecionarCliente")
             on("cancelar").to("sair")
        }

        selecionarCliente {
            on("prosseguir")
            {
                // Recupera o comprador selecionado:
                def compradorId = params.comprador
                Venda instanciaVenda = session["instanciaVenda"]
                // Atualiza o comprador na venda:
                instanciaVenda.comprador = Cliente.get(compradorId)
                // Atualiza a venda armazenada na sessão:
                session["instanciaVenda"] = instanciaVenda
            }.to("incluirItem")
            on("cancelar").to("sair")
        }

        incluirItem {
            on("pesquisar")
            {
                // Recupera os dados do produto selecionado:
                def produtoId = params.produto
                def quantidade = params.quantidade
                Produto produto = Produto.get(produtoId)
                session["produtoId"] = produtoId
                session["produtoNome"] = produto.nome
                session["valorUnitario"] = produto.precoVenda
            }.to("incluirItem")
            on("adicionar")
            {
                // Recupera os dados do produto selecionado:
                if((!params.quantidade) || (Integer.parseInt(params.quantidade) < 1)) {
                    flash.message = 'Digite uma quantidade válida, por favor.'
                }
                else
                {
                    int produtoId = Integer.parseInt(session["produtoId"])
                    int quantidade = Integer.parseInt(params.quantidade)
                    BigDecimal valorUnitario = new BigDecimal(params.valorUnitario)
                    Produto produto = Produto.get(produtoId)
                    Venda instanciaVenda = session["instanciaVenda"]
                    // Acrescenta o item na venda:
                    ItemVenda itemVenda = new ItemVenda(produto: produto, quantidade: quantidade, valorUnitario: valorUnitario)
                    instanciaVenda.itensVenda.add(itemVenda)
                    // Atualiza a venda armazenada na sessão:
                    session["instanciaVenda"] = instanciaVenda
                }
            }.to("incluirItem")
            /*
            on("remover")
            {
                 Implementar !!!
                // Recupera os dados do produto selecionado:
                int produtoId = params.remover.id
                int quantidade = Integer.parseInt(params.quantidade)
                BigDecimal valorUnitario = new BigDecimal(params.valorUnitario)
                Produto produto = Produto.get(produtoId)
                Venda instanciaVenda = session["instanciaVenda"]
                // Acrescenta o item na venda:
                ItemVenda itemVenda = new ItemVenda(produto: produto, quantidade: quantidade, valorUnitario: valorUnitario)
                instanciaVenda.itensVenda.add(itemVenda)
                // Atualiza a venda armazenada na sessão:
                session["instanciaVenda"] = instanciaVenda

            }.to("incluirItem") */
            on("prosseguir").to("vendaCompleta")
            on("cancelar").to("sair")
        }

        vendaCompleta {
            on("nova").to("inicializar")
            on("cancelar").to("sair")
        }

        sair {
            redirect(url:"http://localhost:8987/FarmaWeb/")
        }

    }

}
